From 38f74d8a23223e3467e368ebc6b601d26449a690 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sun, 1 Nov 2020 16:51:14 -0500 Subject: [PATCH] builder-tool: Rewrite GtkFixed more GtkFixedLayout does not have layout properties for x and y, so turn those into a transform. --- gtk/tools/gtk-builder-tool-simplify.c | 108 ++++++++++++++++---------- 1 file changed, 67 insertions(+), 41 deletions(-) diff --git a/gtk/tools/gtk-builder-tool-simplify.c b/gtk/tools/gtk-builder-tool-simplify.c index 6b1f2fdb28..cd695979cd 100644 --- a/gtk/tools/gtk-builder-tool-simplify.c +++ b/gtk/tools/gtk-builder-tool-simplify.c @@ -1341,46 +1341,6 @@ rewrite_dialog (Element *element, } -static void -rewrite_layout_props (Element *element, - MyParserData *data) -{ - GList *l, *ll; - - for (l = element->children; l; l = l->next) - { - Element *child = l->data; - - if (g_str_equal (child->element_name, "child")) - { - Element *object = NULL; - Element *packing = NULL; - - for (ll = child->children; ll; ll = ll->next) - { - Element *elt2 = ll->data; - - if (g_str_equal (elt2->element_name, "object")) - object = elt2; - - if (g_str_equal (elt2->element_name, "packing")) - packing = elt2; - } - - if (object && packing) - { - child->children = g_list_remove (child->children, packing); - - g_free (packing->element_name); - packing->element_name = g_strdup ("layout"); - - packing->parent = object; - object->children = g_list_append (object->children, packing); - } - } - } -} - static void rewrite_grid_layout_prop (Element *element, const char *attr_name, @@ -1880,6 +1840,72 @@ rewrite_toolbar (Element *element, set_attribute_value (add_element (style, "class"), "name", "toolbar"); } +static void +rewrite_fixed (Element *element, + MyParserData *data) +{ + GList *l, *ll; + + for (l = element->children; l; l = l->next) + { + Element *child = l->data; + + if (g_str_equal (child->element_name, "child")) + { + Element *object = NULL; + Element *packing = NULL; + + for (ll = child->children; ll; ll = ll->next) + { + Element *elt2 = ll->data; + + if (g_str_equal (elt2->element_name, "object")) + object = elt2; + + if (g_str_equal (elt2->element_name, "packing")) + packing = elt2; + } + + if (object && packing) + { + int x = 0; + int y = 0; + Element *layout; + Element *new_prop; + GskTransform *transform; + + for (ll = packing->children; ll; ll = ll->next) + { + Element *elt2 = ll->data; + GValue value = G_VALUE_INIT; + + if (has_attribute (elt2, "name", "x")) + { + if (gtk_builder_value_from_string_type (data->builder, G_TYPE_INT, elt2->data, &value, NULL)) + x = g_value_get_int (&value); + } + else if (has_attribute (elt2, "name", "y")) + { + if (gtk_builder_value_from_string_type (data->builder, G_TYPE_INT, elt2->data, &value, NULL)) + y = g_value_get_int (&value); + } + } + + child->children = g_list_remove (child->children, packing); + free_element (packing); + + layout = add_element (object, "layout"); + new_prop = add_element (layout, "property"); + set_attribute_value (new_prop, "name", "transform"); + + transform = gsk_transform_translate (NULL, &GRAPHENE_POINT_INIT (x, y)); + new_prop->data = gsk_transform_to_string (transform); + gsk_transform_unref (transform); + } + } + } +} + /* returns TRUE to remove the element from the parent */ static gboolean simplify_element (Element *element, @@ -2002,7 +2028,7 @@ rewrite_element (Element *element, if (element_is_object_or_template (element) && g_str_equal (get_class_name (element), "GtkFixed")) - rewrite_layout_props (element, data); + rewrite_fixed (element, data); if (element_is_object_or_template (element) && (g_str_equal (get_class_name (element), "GtkAspectFrame") || -- 2.30.2